#  Базовое описание сущности "Contexts"
entities:
  aspects:
    title: Аспекты
    # Параметры использования аспектов
    config:
      root_menu: Архитектура/Аспекты    # Размещение аспектов в меню
    description: >
      Архитектурные аспекты.
    schema:
      type: object
      patternProperties:
        "^[a-zA-Z][a-zA-Z0-9_-]*(\\.[a-zA-Z][a-zA-Z0-9_-]*)*$":
          type: object
          properties:
            title:
              title: Название аспекта
              type: string
          required:
            - title
      additionalProperties: false
    # Определяет пути к объектам сущности
    objects:
      aspect:
        route: "/"           # Путь к аспекту
        title: Арх. аспект      # Название объекта
        # JSONata генератор символа в svg для представления в диаграммах.
        #  $object  - передается объект рендеринга. Может быть не определен. В этом случае, необходимо вернуть неспецифичный (общий) символ объекта.
        #  $        - Data Lake архитектуры. Может быть не определен, если Data Lake недоступен.
        symbol: >
          (
            '<svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">'
            & '<title>alt-battery-4</title>'
            & '<path d="M0 20q0 2.496 1.76 4.256t4.256 1.76h17.984q2.496 0 4.256-1.76t1.76-4.256h1.984v-8h-1.984q0-2.464-1.76-4.224t-4.256-1.76h-17.984q-2.496 0-4.256 1.76t-1.76 4.224v8zM4 20v-8q0-0.832 0.576-1.408t1.44-0.576h17.984q0.832 0 1.408 0.576t0.608 1.408v8q0 0.832-0.608 1.44t-1.408 0.576h-17.984q-0.832 0-1.44-0.576t-0.576-1.44zM6.016 20h1.984v-8h-1.984v8zM10.016 20h1.984v-8h-1.984v8zM14.016 20h1.984v-8h-1.984v8zM18.016 20h1.984v-8h-1.984v8z"></path>'
            & '</svg>'
          )
      test:
        route: "/"
        title: Пробный объект
        symbol: >
          (
            '<svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">'
            & '<title>alt-battery-4</title>'
            & '<path d="M0 20q0 2.496 1.76 4.256t4.256 1.76h17.984q2.496 0 4.256-1.76t1.76-4.256h1.984v-8h-1.984q0-2.464-1.76-4.224t-4.256-1.76h-17.984q-2.496 0-4.256 1.76t-1.76 4.224v8zM4 20v-8q0-0.832 0.576-1.408t1.44-0.576h17.984q0.832 0 1.408 0.576t0.608 1.408v8q0 0.832-0.608 1.44t-1.408 0.576h-17.984q-0.832 0-1.44-0.576t-0.576-1.44zM6.016 20h1.984v-8h-1.984v8zM10.016 20h1.984v-8h-1.984v8zM14.016 20h1.984v-8h-1.984v8zM18.016 20h1.984v-8h-1.984v8z"></path>'
            & '</svg>'
          )
    menu: >
      (
        $aspects := aspects;
        $config := entities.aspects.config;
        $makeLocation := function($id) {(
            $arrleft := function($arr ,$count) {
                $map($arr, function($v, $i) {
                  $i <= $count ? $v
                })
            };
            $domains := $split($id, ".");
            $config.root_menu & "/" & $join($map($domains, function($domain, $index) {(
                $lookup($aspects, $join($arrleft($domains, $index), ".")).title
            )}), "/");
        )};
        [$append([{
            "link": "/entities/aspects/tree", /* Ссылка на форму представления аспектов в виде дерева */
            "location": $config.root_menu     /* Расположение в меню */
          }],
          [$aspects.$spread().(          
            *.location ? {
              "link": "/entities/aspects/blank?dh-aspect-id=" & $keys()[0],     /* Формируем ссылку на карточку */
              "location": $makeLocation($keys()[0])                             /* Формируем расположение в меню */
            }
          )][location]
        )];
      )